#include <iostream>
#include <vector>

using namespace std;

const int N = 3e5 + 10;

vector<int> A;            // 离散值 - x表
vector<pair<int, int>> B; // x - c表
vector<pair<int, int>> M; // l - r表

int q[N]; // 离散值 - c表
int s[N]; // 前缀和数值

// 快速排序
void quick_sort(int l, int r)
{
    if (l >= r)
        return;
    int x = A[l + r >> 1];
    int i = l - 1, j = r + 1;
    while (i < j)
    {
        while (A[++i] < x)
            ;
        while (A[--j] > x)
            ;
        if (i < j)
            swap(A[i], A[j]);
    }

    quick_sort(l, j);
    quick_sort(j + 1, r);
}

// 去重
void erase_same()
{
    if (A.size() <= 1)
        return;
    int i = 0, j = 1;
    for (; j < A.size(); j++)
        if (A[i] != A[j])
            A[++i] = A[j];
    A.erase(A.begin() + i + 1, A.end());
}

// 二分查找x的离散值, 找不到返回第一个大的, 离散值从1开始
int find(int x)
{
    int l = 0, r = A.size() - 1;
    int mid = l + r >> 1;
    while (l < r)
    {
        if (A[mid] >= x)
            r = mid;
        else
            l = mid + 1;
        mid = l + r >> 1;
    }
    return r + 1;
}

// 初始化原数值q[], 前缀和数组s[]
void init_qs_array()
{
    int x;
    for (auto item : B)
    {
        x = find(item.first);
        q[x] += item.second;
    }
    for (int i = 1; i <= A.size(); i++)
        s[i] = s[i - 1] + q[i];
}

int main(void)
{
    int n, m, x, c, l, r;
    cin >> n >> m;
    for (int i = 0; i < n; i++)
    {
        scanf("%d%d", &x, &c);
        A.push_back(x);
        B.push_back({x, c});
    }
    for (int i = 0; i < m; i++)
    {
        scanf("%d%d", &l, &r);
        A.push_back(l);
        A.push_back(r);
        M.push_back({l, r});
    }

    // 排序, 去重得散列表
    quick_sort(0, A.size() - 1);
    erase_same();

    // 初始化q[], s[]
    init_qs_array();

    for (auto item : M)
    {
        l = find(item.first);
        r = find(item.second);
        printf("%d\n", s[r] - s[l - 1]);
    }
}